// $u.mixin.js
import store from "@/store"
import io from 'socket.io-client';
// 尝试将用户在根目录中的store/index.js的vuex的state变量，全部加载到全局变量中
let $uStoreKey = [];
try {
	$uStoreKey = store.state ? Object.keys(store.state) : [];
} catch (e) {

}
// #ifndef VUE3
import {
	mapState
} from 'vuex'
module.exports = {
	data() {
		return {
			$v: null
		};
	},
	methods: {
		someEventHandler() {
			// 触发事件
		}
	},
	created() {
		// 将vuex方法挂在到$uv中
		// 使用方法为：如果要修改vuex的state中的user.name变量为"史诗" => this.$uv.vuex('user.name', '史诗')
		// 如果要修改vuex的state的version变量为1.0.1 => this.$uv.vuex('version', '1.0.1')
		this.$uv.vuex = (name, value) => {
			this.$store.commit('$uStore', {
				name,
				value
			})
		}
		this.navigateBack = () => {
			// #ifdef APP
			uni.$uv.route({
				type: 'navigateBack',
				// fail(params) {
				// 	console.log(params)
				// }
			})
			// #endif
			// #ifndef APP
			history.back();
			// #endif
		}
		this.$replacd = (e, e1 = /https?:\/\/localhost:8080/gi, e2 = "https://www.readend.com") => {
			if (!e[0] || !e) return []
			if (typeof e === 'string') {
				// 执行替换操作（不区分大小写）
				return e.replaceAll(e1, e2);
			}
			if (Array.isArray(e)) {
				// 递归处理数组元素
				return e.map(item => this.$replacd(item, e1, e2));
			}
			if (typeof e === 'object' && e !== null) {
				// 递归处理对象属性
				const newObj = {};
				for (const key in e) {
					if (e.hasOwnProperty(key)) {
						newObj[key] = this.$replacd(e[key], e1, e2);
					}
				}
				return newObj;
			}
			// 其他类型直接返回
			return e;
		}
		
		// var mid = uni.$uv.guid(10);
		// this.$v = io(this.vuex_user.baseUrl, {
		// 	query: {
		// 		mid: mid
		// 	},
		// 	upgrade: false,
		// 	secure: true,
		// 	rejectUnauthorized: false,
		// 	auth: {
		// 		authorization: "Bearer " + this.vuex_token
		// 	},
		// 	transports: ['websocket', 'polling'],
		// });

		// this.$uv.emit = (name, value) => {
		// 	this.$store.commit('$uStore', {
		// 		name,
		// 		value
		// 	})
		// }
		// this.wits = (eventName, value) => {
		// 	uni.$emit(eventName, value);
		// }
		// this.witOn = (eventName, value) => {
		// 	uni.$once(eventName, value);
		// }
	},
	computed: {
		// 将vuex的state中的所有变量，解构到全局混入的mixin中
		...mapState($uStoreKey)
	}
}
// #endif

// #ifdef VUE3
import {
	defineComponent
} from 'vue';
const {
	state
} = store;
export default defineComponent({
	// 组件选项
	mixins: [{
		// mixin定义
		data() {
			return {
				...state
			};
		},
	}],
	created() {
		this.$uv.vuex = (name, value) => {
			this.$store.commit('$uStore', {
				name,
				value
			})
		}
		// createApp ,createSSRApp
		// app.config.globalProperties.$u.vuex = store.dispatch.bind(store);
		// app.config.globalProperties.$u.vuex =
		// 	(name, value) => {
		// 		store.commit('vuex', {
		// 			name: name,
		// 			value: value
		// 		})
		// 	}
	}
});
// #endif
import '@/common/consoleg.js';